# version05:支持多文件同时进行编译，即将多个目标文件进行链接
# 定义变量
BIN=code
#SRC=$(shell ls *.c) # 显示当前命令下所有 .c 后缀的文件（两种写法）
SRC=$(wildcard *.c)
OBJ=$(SRC:.c=.o)  # SRC 内部的文件以.c为后缀的全部转为同名以.o为后缀的文件
CC=gcc
LFLAGS=-o
FLAGS=-c
RM=rm -f

$(BIN):$(OBJ)
	@$(CC) $(LFLAGS) $@ $^  # $@---code; $^---code.o，即将code.o 编译为 code（可执行程序）
	@echo "Linking ------ $^ to $@"

%.o:%.c                 # 将多个源文件编译为对应的目标文件
	@$(CC) $(FLAGS) $<  # 
	@echo "Compling ------ $< to $@"

.PHONY:clean
clean:
	@$(RM) $(OBJ) $(BIN)
	@echo "remove ------ $(OBJ) $(BIN)"


## version04:我们推荐先将源文件编译成目标文件.o，然后再统一与库链接
## 定义变量
#BIN=code
#OBJ=code.o
#SRC=code.c
#CC=gcc
#LFLAGS=-o
#FLAGS=-c
#RM=rm -f
#
#$(BIN):$(OBJ)
#	@$(CC) $(LFLAGS) $@ $^  # $@---code; $^---code.o，即将code.o 编译为 code（可执行程序）
#	@echo "Linking ------ $^ to $@"
#
#$(OBJ):$(SRC)
#	@$(CC) $(FLAGS) $<  # $<即将code.c 编译为 code.o
#	@echo "Compling ------ $< to $@"
#
#.PHONY:clean
#clean:
#	@$(RM) $(OBJ) $(BIN)
#	@echo "remove ------ $(OBJ) $(BIN)"


## version03
## 定义变量
#BIN=code
#SRC=code.c
#CC=gcc
#RM=rm -f
#FLAGS=-o
#
#$(BIN):$(SRC)
#	$(CC) $(FLAGS) $@ $^  # $@---code;  $^----code.c
#
#.PHONY:clean
#clean:
#	$(RM) $(BIN)


## version02
## 定义变量
#BIN=code
#SRC=code.c
#CC=gcc
#RM=rm -f
#FLAGS=-o
#
#$(BIN):$(SRC)
#	@$(CC) $(SRC) $(FLAGS) $(BIN) #加上@可以让该命令在执行make指令时不再打印出来
#
#.PHONY:clean
#clean:
#	@$(RM) $(BIN)


## version01
## 定义变量
#BIN=code
#SRC=code.c
#CC=gcc
#RM=rm -f
#FLAGS=-o
#
#$(BIN):$(SRC)
#	$(CC)  $(SRC) $(FLAGS) $(BIN)
#
#.PHONY:clean
#clean:
#	$(RM) $(BIN)

#code:code.c
#	gcc code.c -o code
#
#.PHONY:clean
#clean:
#	rm -f code
